package com.example.mq;

import com.example.demo.FileChooserUI;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.amqp.core.Message;
import com.rabbitmq.client.Channel;

import javax.swing.*;
import java.io.IOException;

@Component
public class MessageConsumer {

    @RabbitListener(queues = "FilePlacingQueue" , ackMode = "MANUAL")// 应答模式：手动
    public void consumerFileMessage(Integer msg, Message message, Channel channel){
        try {
            // 处理消息
            System.out.println("mq消费到数据：" + msg);
            FileChooserUI.progressBar.setValue(msg);


            // 手动确认消息 第一个参数是该消息的唯一标示值 false表示只删除该消息（true表示确认所有比指定的 deliveryTag 小或等于它的消息。）
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
        } catch (Exception e) {
            System.out.println("消费出现异常");
            e.printStackTrace();

            // 出错就拒绝消息 并放回队列
            try {
                channel.basicReject(message.getMessageProperties().getDeliveryTag(),true);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
    }
}